package com.xiefengf.Fanout2;

import com.rabbitmq.client.BuiltinExchangeType;
import com.xiefengf.utils.RabbitUtils;

/**
 * @author xiefengf
 * @version 1.0
 * @date 2023/8/2 23:34
 * Fanout方式（随机获取队列） 不指定队列名称，队列随机生成名称即可。但是此队列默认会自动删除
 */
public class Fanout2 {

    /**
     * 交换器名
     */
    private static final String EXCHANGE_NAME = "xiefengf.fanout.v2.exchange";

    /**
     * 消息
     */
    private static final String MESSAGE = "这是Fanout指定队列方式 >>> ";

    /**
     * 声明交换机、声明队列、绑定队列到交换机
     * 使用Fanout方式时
     * 1、生产者的routingkey可以为空，因为生产者的所有数据，会下放到每一个队列，所以不会通过routkey去路由；
     * 2、消费者需要指定queue，因为消费者需要绑定到指定的queue才能消费。
     */
    public static void fanoutQueue(){
        for (int i = 0; i < 3; i++) {
            RabbitUtils.queueDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT,null,"");
        }
    }

    /**
     * fanout方式 生产信息
     */
    public static void fanoutPublish() {
        // 生产消息
        for (int i = 0; i < 10; i++) {
            RabbitUtils.rabbitProducer(EXCHANGE_NAME, "", MESSAGE + i + " key为：");
        }
    }

    /**
     * fanout方式 消费信息 --- 随机获取
     */
    public static void fanoutConsumer() {
        // 消费消息 --- 这里的队列名称都是mq自动生成
        RabbitUtils.rabbitConsumer("amq.gen-ExUnWv57qoESHJ5RG6bWjA");
        RabbitUtils.rabbitConsumer("amq.gen-gxBWfH4MCEOY2lDOla6kbQ");
        RabbitUtils.rabbitConsumer("amq.gen-mdHY4PgLKsXZ7bGD7BYgXg");
    }

    public static void main(String[] args) {
        // 声明队列
//        fanoutQueue();
        // 生产消息
        fanoutPublish();
        // 消费消息
        fanoutConsumer();
    }

}